package com.lining.orangeservice.service;

import com.lining.orangeservice.entity.dto.request.PermissionCreateRequest;
import com.lining.orangeservice.entity.dto.request.PermissionUpdateRequest;
import com.lining.orangeservice.entity.po.Permission;
import cn.hutool.core.lang.tree.Tree;

import java.util.List;

public interface PermissionService {
    void createPermission(PermissionCreateRequest request);

    void deletePermission(Long id);

    void updatePermission(PermissionUpdateRequest request);

    List<Permission> listAllPermissions();
    
    /**
     * 获取所有权限的树形结构（包括菜单、按钮、接口等所有类型）
     *
     * @return 权限树
     */
    List<Tree<Long>> getPermissionTree();

    /**
     * 根据用户ID获取权限树（包括菜单、按钮、接口等所有类型）
     *
     * @param userId 用户ID
     * @return 权限树
     */
    List<Tree<Long>> getPermissionTreeByUserId(Long userId);
    
    /**
     * 获取所有权限列表（包括菜单、按钮、接口等所有类型）
     *
     * @return 权限列表
     */
    List<Permission> getAllPermissions();
    
    /**
     * 根据用户ID获取该用户的所有权限列表
     *
     * @param userId 用户ID
     * @return 权限列表
     */
    List<Permission> getPermissionsByUserId(Long userId);
}